package com.demo.java.net.url;

import org.junit.Test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * Created by carlkong on 2016/5/26.
 */
public class UnitTest {
    //创建一个URL的实例
    @Test
    public void testURL1() {
        try {
            URL baidu = new URL("http://www.baidu.com");
            URL url = new URL(baidu, "/index.html?username=tom#test");//？表示参数，#表示锚点
            String Protocol = url.getProtocol();//获取协议
            String Host = url.getHost();//获取主机
            int Port = url.getPort();//如果没有指定端口号，根据协议不同使用默认端口。此时getPort()方法的返回值为 -1
            String Path = url.getPath();//获取文件路径
            String FileName = url.getFile();//文件名，包括文件路径+参数
            String Ref = url.getRef();//相对路径，就是锚点，即#号后面的内容
            String Query = url.getQuery();//查询字符串，即参数

            System.out.println("Protocol:" + Protocol);
            System.out.println("Host:" + Host);
            System.out.println("Port:" + Port);
            System.out.println("Path" + Path);
            System.out.println("FileName:" + FileName);
            System.out.println("Ref:" + Ref);
            System.out.println("Query:" + Query);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }

    //使用URL读取网页内容
    @Test
    public void testURL2() {
        try {
            //创建一个URL实例
            URL url = new URL("http://www.baidu.com");
            InputStream is = url.openStream();//通过openStream方法获取资源的字节输入流
            InputStreamReader isr = new InputStreamReader(is, "UTF-8");//将字节输入流转换为字符输入流,如果不指定编码，中文可能会出现乱码
            BufferedReader br = new BufferedReader(isr);//为字符输入流添加缓冲，提高读取效率
            String data = br.readLine();//读取数据
            while (data != null) {
                System.out.println(data);//输出数据
                data = br.readLine();
            }
            br.close();
            isr.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
